package br.com.prontuario.entidade;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="ProcedimentoConsulta")
public class ProcedimentoConsulta implements Serializable {
	
	private static final long serialVersionUID = 1L;

	// Ordem dos campos -> Data procedimento, Tipo do procedimento.
	
	
	@Id
	@GeneratedValue
	private Long id;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataProcedimento;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataRetorno;

	@Column(length=300)
	private String observacao;
	
	@Column(length=1000)
	private String anamnese;
	
	private Double totalProcedimento;
	private Double porcentagem;
	private Double totalLiquido;
	
	private Double pesoAnimal;
	
 	@ManyToOne
	@Fetch(FetchMode.SELECT)
	@JoinColumn(name = "CONSULTA_ID", nullable = false)
	private Consulta consulta;
 	
 	@ManyToOne
	@Fetch(FetchMode.SELECT)
	@JoinColumn(name = "PROCEDIMENTO_ID", nullable = false)
	private Procedimento procedimento;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getDataProcedimento() {
		return dataProcedimento;
	}

	public void setDataProcedimento(Date dataProcedimento) {
		this.dataProcedimento = dataProcedimento;
	}

	public Date getDataRetorno() {
		return dataRetorno;
	}

	public void setDataRetorno(Date dataRetorno) {
		this.dataRetorno = dataRetorno;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public Double getTotalProcedimento() {
		return totalProcedimento;
	}

	public void setTotalProcedimento(Double totalProcedimento) {
		this.totalProcedimento = totalProcedimento;
	}

	public Double getTotalLiquido() {
		return totalLiquido;
	}

	public void setTotalLiquido(Double totalLiquido) {
		this.totalLiquido = totalLiquido;
	}

	public Double getPesoAnimal() {
		return pesoAnimal;
	}

	public void setPesoAnimal(Double pesoAnimal) {
		this.pesoAnimal = pesoAnimal;
	}

	public Consulta getConsulta() {
		return consulta;
	}

	public void setConsulta(Consulta consulta) {
		this.consulta = consulta;
	}

	public Procedimento getProcedimento() {
		return procedimento;
	}

	public void setProcedimento(Procedimento procedimento) {
		this.procedimento = procedimento;
	}

	public Double getPorcentagem() {
		return porcentagem;
	}

	public void setPorcentagem(Double porcentagem) {
		this.porcentagem = porcentagem;
	}
	
	

	public String getAnamnese() {
		return anamnese;
	}

	public void setAnamnese(String anamnese) {
		this.anamnese = anamnese;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((consulta == null) ? 0 : consulta.hashCode());
		result = prime
				* result
				+ ((dataProcedimento == null) ? 0 : dataProcedimento.hashCode());
		result = prime * result
				+ ((dataRetorno == null) ? 0 : dataRetorno.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((observacao == null) ? 0 : observacao.hashCode());
		result = prime * result
				+ ((pesoAnimal == null) ? 0 : pesoAnimal.hashCode());
		result = prime * result
				+ ((porcentagem == null) ? 0 : porcentagem.hashCode());
		result = prime * result
				+ ((procedimento == null) ? 0 : procedimento.hashCode());
		result = prime * result
				+ ((totalLiquido == null) ? 0 : totalLiquido.hashCode());
		result = prime
				* result
				+ ((totalProcedimento == null) ? 0 : totalProcedimento
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ProcedimentoConsulta other = (ProcedimentoConsulta) obj;
		if (consulta == null) {
			if (other.consulta != null)
				return false;
		} else if (!consulta.equals(other.consulta))
			return false;
		if (dataProcedimento == null) {
			if (other.dataProcedimento != null)
				return false;
		} else if (!dataProcedimento.equals(other.dataProcedimento))
			return false;
		if (dataRetorno == null) {
			if (other.dataRetorno != null)
				return false;
		} else if (!dataRetorno.equals(other.dataRetorno))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (observacao == null) {
			if (other.observacao != null)
				return false;
		} else if (!observacao.equals(other.observacao))
			return false;
		if (pesoAnimal == null) {
			if (other.pesoAnimal != null)
				return false;
		} else if (!pesoAnimal.equals(other.pesoAnimal))
			return false;
		if (porcentagem == null) {
			if (other.porcentagem != null)
				return false;
		} else if (!porcentagem.equals(other.porcentagem))
			return false;
		if (procedimento == null) {
			if (other.procedimento != null)
				return false;
		} else if (!procedimento.equals(other.procedimento))
			return false;
		if (totalLiquido == null) {
			if (other.totalLiquido != null)
				return false;
		} else if (!totalLiquido.equals(other.totalLiquido))
			return false;
		if (totalProcedimento == null) {
			if (other.totalProcedimento != null)
				return false;
		} else if (!totalProcedimento.equals(other.totalProcedimento))
			return false;
		return true;
	}
	
	
}